<!--
This is a performance smoke test for DateTime and Date. Some other basic functions are tested by date_time_64.xml, and a more
exhaustive list of functions is in date_time_long.xml (it's about an hour so we can't afford to test it on each commit).
 -->
<test>
    <substitutions>
       <substitution>
           <name>date_transform</name>
           <values>
               <value>toMonday</value>
               <value>toRelativeDayNum</value>
               <value>toYYYYMMDDhhmmss</value>
           </values>
        </substitution>
        <substitution>
            <name>time_zone</name>
            <values>
               <value>Asia/Istanbul</value>
            </values>
        </substitution>
        <substitution>
            <name>binary_function</name>
            <values>
                <value>lessOrEquals</value>
                <value>greater</value>
                <value>plus</value>
                <value>addWeeks</value>
            </values>
        </substitution>
    </substitutions>

    <!-- {date_transform} -->
    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, {date_transform}(t, '{time_zone}'))</query>
    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDate('2017-01-01') + number % 1000 + rand() % 10 AS t, {date_transform}(t))</query>

    <!-- toUnixTimestamp() -->
    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, toUnixTimestamp(t, '{time_zone}'))</query>
    <!-- toUnixTimestamp(Date()) is prohibited, wrap Date() with toUInt16() to overcome -->
    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDate('2017-01-01') + number % 1000 + rand() % 10 AS t, toUnixTimestamp(toUInt16(t)))</query>

    <!-- {binary_function} -->
    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, {binary_function}(t, 1))</query>

    <!-- misc -->

    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, toStartOfInterval(t, INTERVAL 1 month))</query>

    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, date_trunc('month', t))</query>

    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, toDayOfWeek(t, 0, '{time_zone}'))</query>
    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDate('2017-01-01') + number % 1000 + rand() % 10 AS t, toDayOfWeek(t))</query>
</test>
